  // Sequelize 连接数据库 配置一些数据库的相关数据
  const {Sequelize,Model} = require('sequelize')
  const {unset, clone, isArray} = require('lodash')
  const {
      dbName,
      host,
      port,
      user,
      password
  } = require('../config/config').database
const sequelize =new Sequelize(dbName,user,password,{
    dialect: 'mysql', //数据库类型 
    host,
    port,
    logging: false, //显示出来控制台
    timezone: '+08:00',//时区
    define: {
        // create_time && update_time
        timestamps: true, //我们传入{ timestamps: false }是为了关闭Sequelize的自动添加timestamp的功能。所有的ORM框架都有一种很不好的风气，总是自作聪明地加上所谓“自动化”的功能，但是会让人感到完全摸不着头脑。
        // delete_time
        paranoid: true,     // 同时需要设置paranoid为true（此种模式下，删除数据时不会进行物理删除，而是设置deletedAt为当前时间
        createdAt: 'created_at',  // 不需要createdAt字段 false
        updatedAt: 'updated_at',
        deletedAt: 'deleted_at',
        // 把驼峰命名转换为下划线
        underscored: true,
        freezeTableName: true,   // 默认false修改表名为复数，true不修改表名，与数据库表名同步
        scopes: {
            bh: {
                attributes: {
                    exclude: ['updated_at', 'deleted_at', 'created_at']
                }
            }
        }
    }
})
// 创建模型
sequelize.sync({
    force: false
})

Model.prototype.toJSON= function(){
    // let data = this.dataValues
    let data = clone(this.dataValues)
    unset(data, 'updated_at')
    unset(data, 'created_at')
    unset(data, 'deleted_at')

    for (key in data){
        if(key === 'image'){
            if(!data[key].startsWith('http'))
                data[key]=global.config.host + data[key]
        }
    }

    if(isArray(this.exclude)){
        this.exclude.forEach(
            (value)=>{
                unset(data,value)
            }
        )
    }
    // this.exclude
    // exclude
    // a,b,c,d,e
    return data
}
//sync方法如果配置{force: true}时，如果数据库是否有该表，如果有则会删除表，再重建。
module.exports = {
    sequelize
}